﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Net.Sockets;
using System.Net;

using System.Threading;

namespace MyClassSocket
{
    class ChatMan
    {
        int ID_Cliente;
        CPaq_Genric Paq_generic = new CPaq_Genric();
        CPaq_Asignacion Paq_Asig = new CPaq_Asignacion();
        CPaq_Msg Paq_Msg = new CPaq_Msg();
        string Servidor;

        CCliente Cliente;

        public ChatMan()
        {
            Console.WriteLine("Bienvenido a ChatMan");
            Console.Write("Indique IP del Chat: ");

            Servidor = Console.ReadLine();
            Servidor = Console.ReadLine();

            Cliente = new CCliente(Servidor, 7300);
        }

        public void Iniciar()
        {
            Paq_generic.peticion = "Conectar";
            Paq_generic.ID = -1;

            byte[] paq = new byte[1024];
            byte[] paqRTA = new byte[1024];

            paq = CSRepositor.Empaquetar((object)Paq_generic);

            Cliente.Run();
            paqRTA = Cliente.callToSv(paq);

            Paq_Asig =(CPaq_Asignacion) CSRepositor.Desempaquetar(paqRTA);

            if (Paq_Asig.mensage == "Aceptado")
            {
                Console.WriteLine("Conexion Establecida con el Servidor. Tu Eres el Cliente ID: " + Paq_generic.ID);
                ID_Cliente = Paq_Asig.ID;
                int nuevoPort = Convert.ToInt32(Paq_Asig.newPort);

                IPEndPoint remotoEP = new IPEndPoint(IPAddress.Parse(Servidor), nuevoPort);
                Cliente.sockCliente = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                Cliente.sockCliente.Connect(remotoEP);
                
            }

            Console.WriteLine(Paq_generic.peticion);
        }

        public void sendChatear()
        {
            string msg;
            byte[] empaquetado = new byte[1024];

            msg = Console.ReadLine();

            CPaq_Msg paq_msg = new CPaq_Msg();
            paq_msg.ID = ID_Cliente;
            paq_msg.msg = msg;

            empaquetado = CSRepositor.Empaquetar((object)paq_msg);
        }

        public void receivChatear()
        {
            byte[] paq = new byte [1024];
            CPaq_Msg msg = new CPaq_Msg();
            while (true)
            {
                Cliente.sockCliente.Receive(paq);
                msg = (CPaq_Msg) CSRepositor.Desempaquetar(paq);
                Console.WriteLine("Mensaje De Cliente: " + msg.ID);
                Console.WriteLine("     "+ msg.msg);
            }
        }
    }
}
